package com.twl.app.base.util;

import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import com.google.gson.Gson;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import com.google.gson.reflect.TypeToken;

/**
 * 将json字符串和Map 互相转换
 * 
 * @author Val
 *
 */
public class GsonUtils {
	private final static Gson GSON = new Gson();
	private final static Type MAP_TYPE = new TypeToken<Map<String, Object>>() {}.getType();
	private final static Type JSON_OBJECT_TYPE = new TypeToken<ArrayList<JsonObject>>() {}.getType();
	private final static JsonParser JSON_PARSER = new JsonParser();
	//Map转Json字符串
	public static String toJson(Map<String, Object> map) {
		return GSON.toJson(map);
	}
	
	//Json字符串转List<T>
	public static <T> List<T> toList(String json, Class<T> classOfT) {
		List<JsonObject> jsonObjs = GSON.fromJson(json, JSON_OBJECT_TYPE);
		List<T> listOfT = new ArrayList<T>();
		for (JsonObject jsonObj : jsonObjs) {
			listOfT.add(GSON.fromJson(jsonObj, classOfT));
		}
		return listOfT;
	}
	
	//实体类对象转Json字符串
	public static  String toJson(Object obj) {
		return GSON.toJson(obj);
	}
	
	//Json字符串转Map
	public static Map<String, Object> toMap(String json) {
		return GSON.fromJson(json, MAP_TYPE);
	}
	
	//Json字符串转实体类
	public static <T> T toEntity(String json, Class<T> clazz) {
		return GSON.fromJson(json, clazz);
	}
	
	//Json字符串转换成JsonObject,方便根据key取值
	public static JsonObject getJsonObject(String json){
		return JSON_PARSER.parse(json).getAsJsonObject();
	}

}
